Procedimentos com Parâmetros


Considere o código abaixo:


public class App{
    public static void main(String[] args) {
        exibirSaudacao(); // chamada do procedimento
    }

    // definição do procedimento
    public static void exibirSaudacao() {
        System.out.println("Olá! Seja bem-vindo ao programa!");
    }
}


O procedimento exibir saudação, possui apenas um único comando que exibe uma saudação ao iniciar a execução do programa.


Vamos imaginar que o desemvolvedor deseja manter a exibição desta saudação separada dentro de um procedimento, mas deseja customizar o resultado apresentado com base no nome do usuário que acessou o sistema.


Vamos considerar que o desenvolvedor irá obter esta informação através do teclado da seguinte forma:


import java.util.Scanner;

public class App{
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        
        String nome;

        System.out.printf("Informe o seu nome:\n");
        nome = teclado.nextLine();
        
        exibirSaudacao(); // chamada do procedimento
    }

    // definição do procedimento
    public static void exibirSaudacao() {
        System.out.println("Olá " + nome + ", seja bem-vindo ao programa!");
    }
}


Como a variável nome foi declarada dentro do bloco do main, ela não é acessível por outros blocos dentro do programa, desta forma dizemos que a variável nome é local ao bloco main e não pode ser visualizada fora deste bloco. Este conceito chamamos de escopo de variável.


Caso o programador queira que a mensagem exibida pelo procedimento seja: 


Olá Fulano de Tal, seja bem-vindo ao programa! 


Será necessário passarmos uma cópia do conteúdo da variável nome para dentro do procedimento. Isto é realizado através do conceito de passagem de parâmetros, algo que também já estamos utilizando à algum tempo. A passagem de parâmetro é realizada quando executamos um comando/procedimento/função que informamos um ou mais valores dentro dos parenteses como o caso abaixo:


System.out.printf("Informe o seu nome:\n");

Note que estamos executando o printf e informamos dentro dos parenteses o texto "Informe o seu nome: \", isto significa que o printf irá receber um parametro que é o texto que deve ser exibido na tela.


Para atingirmos o mesmo objetivo com o nosso procedimento exibirSaudacao(), precisaremos preparar o procedimento para receber um parametro informado no momento da chamada do procedimento;


A sintaxe de construção de um procedimento com parametros é da seguinte forma:


modificador tipoRetorno nomeDoProcedimento(tipoParametro1 nomeParametro1, tipoParametro2 nomeParametro2, ...) {
    // corpo do procedimento
}

Explicando cada parte:


modificador: indica onde e como o método pode ser acessado (ex: public, private, protected).

tipoRetorno: o tipo de dado que o método devolve. Se o método não devolve nada, usamos void.

nomeDoMetodo: o nome que escolhemos (por convenção, começa com letra minúscula e usa camelCase).

tipoParametro nomeParametro: indica que o método espera receber um valor desse tipo.


A construção de um procedimento pode ser realizada sem a necessidade de informar um parametro, pode ter um parametro, ou pode ter vários parametros. Quem irá definir o comportamento do procedimento em relação ao recebimento ou não dos parametros é o desenvolvedor com base na sua necessidade.


Na caso da nossa necessidade o procedimento precisaria ser criado da seguinte forma, concentre-se principalmente nas partes destacadas de vermelho:


import java.util.Scanner;

public class App{
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        
        String nome;

        System.out.printf("Informe o seu nome:\n");
        nome = teclado.nextLine();
        
        exibirSaudacao(nome); // chamada do procedimento
    }

    // definição do procedimento
    public static void exibirSaudacao(String parametroNome) {
        System.out.println("Olá " + parametroNome + ", seja bem-vindo ao programa!");
    }
}


O que fizemos foi preparar o procedimento para receber um parametro e guardá-lo em parametroNome para ser usado dentro do bloco de comandos do procedimento. Isto obriga ao realizar a chamada/execução do procedimento que é necessário realizar a passagem de algum valor para ser armazenado em parametroNome. No nosso caso ao executarmos o comando abaixo, estamos passando o conteúdo da variável nome como parametro que deverá ser armazenado na variável parametroNome do procedimento exibirSaudacao().


Faça perguntas ao chatgpt ou pesquise na internet os seguintes questionamentos:

- O nome da variável parametroNome poderia ser simplesmente nome. 

- O que acontece ser executarmos a chamada do procedimento exibirSaudacao() e não informar um parametro na chamada.